package com.ainge.easystudy.designpattern.strategy;

/**
 * 基类
 *
 * @author: Ainge
 * @Time: 2021/4/25 20:15
 */
public abstract class Payment {

    private PayType payType;

    Payment(PayType payType) {
        this.payType = payType;
    }

    /**
     * 支付
     *
     * @param price 价格（单位:分）
     */
    public void pay(long price) {
        if (queryBalance() > price) {
            System.out.println(String.format("使用%s，编码=%s，支付扣除了%d分，剩余%d分钱", getName(), getCode(), price,(queryBalance() - price)));
        }
    }

    /**
     * 查询余额
     */
    public abstract long queryBalance();

    /**
     * 名称
     *
     * @return
     */
    public String getName() {
        return payType.getName();
    }

    /**
     * 编码
     *
     * @return
     */
    public String getCode() {
        return payType.getCode();
    }

}
